﻿Public Class MitarbeiterManagerImpl
    Inherits ManagerImpl(Of Mitarbeiter)
    Implements MitarbeiterManager

    Private Class MitarbeiterMapper
        Implements RowMapper(Of Mitarbeiter)
        Public Function map(ByRef reader As System.Data.OleDb.OleDbDataReader) As Mitarbeiter Implements RowMapper(Of Mitarbeiter).map
            Dim mitarbeiter As New Mitarbeiter()
            mitarbeiter.id = reader("id")
            mitarbeiter.vorname = reader("vorname")
            mitarbeiter.nachname = reader("nachname")
            mitarbeiter.passwort = reader("passwort")
            mitarbeiter.stundenansatz = reader("stundenansatz")
            Return mitarbeiter
        End Function
    End Class

    Sub New()
        MyBase.New("mitarbeiter", New MitarbeiterMapper())
    End Sub

    Public Overrides Sub insert(ByRef entity As Mitarbeiter)
        Dim query As New Query
        query.sql = "insert into " & tableName & " (vorname, nachname, passwort, stundenansatz) values (:vorname, :nachname, :passwort, :stundenansatz)"
        query.setParameter("vorname", entity.vorname)
        query.setParameter("nachname", entity.nachname)
        query.setParameter("passwort", entity.passwort)
        query.setParameter("stundenansatz", entity.stundenansatz)
        runQuery(query)
    End Sub

    Public Overrides Sub update(ByRef entity As Mitarbeiter)
        Dim query As New Query
        query.sql = "update " & tableName & " set vorname=:vorname, nachname=:nachname, passwort=:passwort, stundenansatz=:stundenansatz where id=:id"
        query.setParameter("vorname", entity.vorname)
        query.setParameter("nachname", entity.nachname)
        query.setParameter("passwort", entity.passwort)
        query.setParameter("stundenansatz", entity.stundenansatz)
        query.setParameter("id", entity.id)
        runQuery(query)
    End Sub

    Public Function findByNameAndPassword(ByRef mitarbeiter As Mitarbeiter) As Mitarbeiter Implements MitarbeiterManager.findByNameAndPassword
        Dim query As New Query()
        query.sql = "select * from " & tableName & " where vorname like :vorname and nachname like :nachname and passwort=:passwort"
        query.setParameter("vorname", mitarbeiter.vorname)
        query.setParameter("nachname", mitarbeiter.nachname)
        query.setParameter("passwort", mitarbeiter.passwort)
        Return selectSingleQuery(query, New MitarbeiterMapper)
    End Function

    Public Function findByName(ByRef mitarbeiter As Mitarbeiter) As Mitarbeiter Implements MitarbeiterManager.findByName
        Dim query As New Query()
        query.sql = "select * from " & tableName & " where vorname like :vorname and nachname like :nachname"
        query.setParameter("vorname", mitarbeiter.vorname)
        query.setParameter("nachname", mitarbeiter.nachname)
        Return selectSingleQuery(query, New MitarbeiterMapper)
    End Function

End Class
